欧洲高清无码在线_日韩一区中文无码_亚洲欧洲非洲在线观看_国模无码一区二区三区不卡

 
技術(shù)博客INFO
聯(lián)系我們CONTACT

公司地址:茂名市人民南路新村大院22號(hào)101

電話:13592986386

uwsgi學(xué)習(xí)您當(dāng)前的位置:首頁 > uwsgi學(xué)習(xí)

uwsgi學(xué)習(xí)

發(fā)布時(shí)間:2024/10/24 17:06:02

為什么需要uWSGI?
在生產(chǎn)環(huán)境中部署Python Web項(xiàng)目時(shí),uWSGI負(fù)責(zé)處理Nginx轉(zhuǎn)發(fā)的動(dòng)態(tài)請(qǐng)求,并與我們的Python應(yīng)用程序溝通,同時(shí)將應(yīng)用程序返回的響應(yīng)數(shù)據(jù)傳遞給Nginx。


客戶端 <-> Nginx <-> uWSGI <-> Python應(yīng)用程序(Django, Flask)


uWSGI的安裝
pip install uwsgi


為了測(cè)試uWSGI安裝是否成功,可以編寫一個(gè)test.py的測(cè)試文件,添加如下代碼:
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]


然后使用如下命令啟動(dòng)uWSGI Web服務(wù)器, 端口8080
uwsgi --http :8080 --wsgi-file test.py


如果你已經(jīng)有了一個(gè)現(xiàn)成的Django項(xiàng)目,你可以使用如下命令啟動(dòng)Web服務(wù)。
# 使用uwsgi命令行啟動(dòng)Django項(xiàng)目,端口8000
$ uwsgi --http :8000 --module myproject.wsgi






在生產(chǎn)環(huán)境中我們通常不會(huì)使用命令行啟動(dòng)Python Web項(xiàng)目,而是通常編輯好uWSGI配置文件uwsgi.ini, 然后使用如下命令啟動(dòng)Python Web項(xiàng)目。


# 使用uwsgi.ini配置文件啟動(dòng)Django應(yīng)用程序
$ uwsgi --ini uwsgi.ini






uWSGI 常用命令
# 啟動(dòng)uWSGI服務(wù)器
$ uwsgi --ini uwsgi.ini


# 重啟uWSGI服務(wù)器
$ sudo service uwsgi restart


# 查看所有uWSGI進(jìn)程
$ ps aux | grep uwsgi


# 停止所有uWSGI進(jìn)程
$ sudo pkill -f uwsgi -9




uWSGI常用配置
uWSGI常用配置選項(xiàng)如下所示,稍加修改(項(xiàng)目名,項(xiàng)目根目錄)即可部署大部分Python Web項(xiàng)目。




[uwsgi]
uid=www-data # Ubuntu系統(tǒng)下默認(rèn)用戶名
gid=www-data # Ubuntu系統(tǒng)下默認(rèn)用戶組
project=mysite1  # 項(xiàng)目名
base = /home/user1 # 項(xiàng)目根目錄


home = %(base)/Env/%(project) # 設(shè)置項(xiàng)目虛擬環(huán)境,Docker部署時(shí)不需要
chdir=%(base)/%(project) # 設(shè)置工作目錄
module=%(project).wsgi:application # wsgi文件位置


master=True # 主進(jìn)程
processes=2 # 同時(shí)進(jìn)行的進(jìn)程數(shù),一般


# 選項(xiàng)1, 使用unix socket與nginx通信,僅限于uwsgi和nginx在同一主機(jī)上情形
# Nginx配置中uwsgi_pass應(yīng)指向同一socket文件
socket=/run/uwsgi/%(project).sock


# 選項(xiàng)2,使用TCP socket與nginx通信
# Nginx配置中uwsgi_pass應(yīng)指向uWSGI服務(wù)器IP和端口
# socket=0.0.0.0:8000 或則 socket=:8000


# 選項(xiàng)3,使用http協(xié)議與nginx通信
# Nginx配置中proxy_pass應(yīng)指向uWSGI服務(wù)器一IP和端口
# http=0.0.0.0:8000 


# socket權(quán)限設(shè)置
chown-socket=%(uid):www-data
chmod-socket=664


# 進(jìn)程文件
pidfile=/tmp/%(project)-master.pid


# 以后臺(tái)守護(hù)進(jìn)程運(yùn)行,并將log日志存于temp文件夾。
daemonize=/var/log/uwsgi/%(project).log 


# 服務(wù)停止時(shí),自動(dòng)移除unix socket和pid文件
vacuum=True


# 為每個(gè)工作進(jìn)程設(shè)置請(qǐng)求數(shù)的上限。當(dāng)處理的請(qǐng)求總數(shù)超過這個(gè)量,進(jìn)程回收重啟。
max-requests=5000


# 當(dāng)一個(gè)請(qǐng)求花費(fèi)的時(shí)間超過這個(gè)時(shí)間,那么這個(gè)請(qǐng)求都會(huì)被丟棄。
harakiri=60


#當(dāng)一個(gè)請(qǐng)求被harakiri殺掉會(huì),會(huì)輸出一條日志
harakiri-verbose=true


# uWsgi默認(rèn)的buffersize為4096,如果請(qǐng)求數(shù)據(jù)超過這個(gè)量會(huì)報(bào)錯(cuò)。這里設(shè)置為64k
buffer-size=65536


# 如果http請(qǐng)求體的大小超過指定的限制,打開http body緩沖,這里為64k
post-buffering=65536


#開啟內(nèi)存使用情況報(bào)告
memory-report=true


#設(shè)置平滑的重啟(直到處理完接收到的請(qǐng)求)的長等待時(shí)間(秒)
reload-mercy=10


#設(shè)置工作進(jìn)程使用虛擬內(nèi)存超過多少M(fèi)B就回收重啟
reload-on-as=1024




uWSGI和Nginx之間的通信方式


如果你的nginx與uwsgi在同一臺(tái)服務(wù)器上,優(yōu)先使用本地機(jī)器的unix socket進(jìn)行通信,這樣速度更快。此時(shí)nginx的配置文件如下所示:
location / {     
    include /etc/nginx/uwsgi_params;
    uwsgi_pass unix:/run/uwsgi/django_test1.sock;
}










uWSGI是一個(gè)應(yīng)用服務(wù)器,它實(shí)現(xiàn)了WSGI協(xié)議并提供了高性能的Web應(yīng)用程序托管環(huán)境。它支持多種協(xié)議,包括HTTP、FastCGI、SCGI等,使得Python應(yīng)用程序可以與不同類型的Web服務(wù)器通信。
uwsgi是一個(gè)通信協(xié)議,它定義了應(yīng)用服務(wù)器和Web服務(wù)器之間的通信方式。uWSGI應(yīng)用服務(wù)器是uwsgi協(xié)議的一種實(shí)現(xiàn)。